package com.wjy.Seckill.service;

import java.util.List;

import com.wjy.Seckill.dto.Exposer;
import com.wjy.Seckill.dto.SeckillExecution;
import com.wjy.Seckill.entity.Seckill;
import com.wjy.Seckill.exception.RepeatKillException;
import com.wjy.Seckill.exception.SeckillCloseException;
import com.wjy.Seckill.exception.SeckillException;

public interface SeckillService {
	/**
	 * 查询全部的秒杀记录
	 * @return
	 */
	List<Seckill> getSeckillList();

	/**
	 * 查询单个秒杀记录
	 * @param seckillId
	 * @return
	 */
	Seckill getById(long seckillId);

	/**
	 * 封装执行秒杀后的结果:是否秒杀成功
	 * @param seckillId
	 * @return
	 */
	Exposer exportSeckillUrl(long seckillId);

	/**
	 *  执行秒杀操作，有可能失败，有可能成功，所以要抛出我们允许的异常
	 * @param seckillId
	 * @param userPhone
	 * @param md5
	 * @return
	 */
	SeckillExecution executeSeckill(long seckillId, long userPhone, String md5)
			throws SeckillException, RepeatKillException, SeckillCloseException;

	/**
	 * 执行秒杀操作by Procedure
	 * @param seckillId
	 * @param userPhone
	 * @param md5
	 * @return
	 */
	SeckillExecution executeSeckillProcedure(long seckillId, long userPhone, String md5);
}
